package com.zjsru.plan2023.oneday;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;

/**
 * @Author: cookLee
 * @Date: 2023-11-07
 * 统计范围内的元音字符串数
 */
public class VowelStrings {

    /**
     * 主
     * \
     * 输入：words = ["are","amy","u"], left = 0, right = 2
     * 输出：2
     * 解释：
     * - "are" 是一个元音字符串，因为它以 'a' 开头并以 'e' 结尾。
     * - "amy" 不是元音字符串，因为它没有以元音字母结尾。
     * - "u" 是一个元音字符串，因为它以 'u' 开头并以 'u' 结尾。
     * 在上述范围中的元音字符串数目为 2 。
     * \
     * 输入：words = ["hey","aeo","mu","ooo","artro"], left = 1, right = 4
     * 输出：3
     * 解释：
     * - "aeo" 是一个元音字符串，因为它以 'a' 开头并以 'o' 结尾。
     * - "mu" 不是元音字符串，因为它没有以元音字母开头。
     * - "ooo" 是一个元音字符串，因为它以 'o' 开头并以 'o' 结尾。
     * - "artro" 是一个元音字符串，因为它以 'a' 开头并以 'o' 结尾。
     * 在上述范围中的元音字符串数目为 3 。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        VowelStrings vowelStrings = new VowelStrings();
        String[] words = new String[]{"are", "amy", "u"};
        int left = 0;
        int right = 2;
        System.out.println(vowelStrings.vowelStrings(words, left, right));
    }

    /**
     * 元音
     */
    private static final Character[] vowels = new Character[]{'a', 'e', 'u', 'i', 'o'};

    /**
     * 元音弦
     * 元音弦:模拟
     *
     * @param words 字词
     * @param left  左
     * @param right 右
     * @return int
     */
    public int vowelStrings(String[] words, int left, int right) {
        int ans = 0;
        int[] vowelsIndex = new int[200];
        for (Character c : vowels) {
            vowelsIndex[c]++;
        }
        for (int i = left; i <= right; i++) {
            String word = words[i];
            if (vowelsIndex[word.charAt(0)] == 1 && vowelsIndex[word.charAt(word.length() - 1)] == 1) {
                ans++;
            }
        }
        return ans;
    }

    /**
     * 元音弦
     *
     * @param words 字词
     * @param left  左
     * @param right 右
     * @return int
     */
    public int vowelStrings2(String[] words, int left, int right) {
        List<Character> vowels = Arrays.asList('a', 'e', 'i', 'o', 'u');
        return (int) IntStream.rangeClosed(left, right)
                .boxed()
                .map(i -> words[i])
                .filter(w -> vowels.contains(w.charAt(0)) && vowels.contains(w.charAt(w.length() - 1)))
                .count();
    }


}
